home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 1 / CU Amiga Magazine CD-ROM Special Edition (1995)(EMAP Images)(GB)[Issue 1995-11].iso / Aminet / misc / amag / AM9407_2.lha / Locale-Library / listing4.c < prev    next >
C/C++ Source or Header  |  1994-06-28  |  2KB  |  79 lines

  1. /* Dieses Programm demonstriert die Benutzung der
  2.  * Funktion FormatString()
  3.  * Verwendeter C-Compiler: SAS-C 6.5x
  4.  */
  5. #include <exec/types.h>
  6. #include <proto/dos.h>
  7. #include <proto/exec.h>
  8. #include <proto/locale.h>
  9. #include <proto/utility.h>
  10. #include <stdio.h>
  11.  
  12. struct Library *LocaleBase=NULL;
  13. struct Locale *locale;
  14.  
  15. /* Diese Routine wird vom Betriebssystem angesprungen.
  16.  * Wir leiten den Aufruf schnurstracks an unsere eigene
  17.  * Routine weiter */
  18. ULONG __saveds __asm hookEntry(
  19.              register __a0 struct Hook *h, 
  20.              register __a2 void *obj, 
  21.              register __a1 void *msg)
  22. {
  23.   return((*h->h_SubEntry) (h,obj,msg));
  24. }
  25. /* Füllt die Hook-Struktur aus */
  26. void InitHook(struct Hook *hook, 
  27.               ULONG (*func)(), 
  28.               void *data)
  29. {
  30.   if( hook ) {
  31.     hook->h_Entry = (ULONG (*)()) hookEntry;
  32.     hook->h_SubEntry = func;
  33.     hook->h_Data = data;
  34.   }
  35. }
  36. /* Erhält zeichenweise Informationen von FormatString()
  37.  * der Locale-Library und gibt sie aus */
  38. ULONG __saveds __asm My_FormatString(
  39.   register __a0 struct Hook *h, 
  40.   register __a2 void *obj, 
  41.   register __a1 void *msg) /* Hier steht das Zeichen */
  42. {
  43.   if( msg != 0 ) printf("%c",msg);
  44.   else           printf("\n");
  45.   return 1;
  46. }
  47. /* Diese Funktion wurde implementiert, um die Daten 
  48.  * per Stack übergeben zu können
  49.  */
  50. void CallFormatString(struct Hook *h, char *format, 
  51.                       ULONG tag1, ...)
  52. {
  53.    FormatString(locale,format,&tag1,h);
  54. }
  55. void main(ULONG argc, char **argv)
  56. {
  57.   struct Hook formstring;
  58.   if( argc ) {
  59.     /* Nur vom CLI zu starten */
  60.     LocaleBase=OpenLibrary("locale.library",38);
  61.     if( LocaleBase ) {
  62.       locale=OpenLocale(NULL);
  63.       if( locale ) {
  64.         InitHook(&formstring, My_FormatString, NULL);
  65.         /* Normale Reihenfolge */
  66.         CallFormatString(&formstring, 
  67.                   "Stunde: %ld, Minute: %ld", 10, 20);
  68.         /* Umgekehrte Reihenfolge (die Daten im
  69.          * Datenstrom behalten aber ihre ursprüngliche
  70.          * Postition */
  71.         CallFormatString(&formstring, 
  72.               "Minute: %2$ld, Stunde: %1$ld", 10, 20);
  73.         CloseLocale( locale );
  74.       }
  75.       CloseLibrary(LocaleBase);
  76.     } else printf("Locale-Library nicht vorhanden\n");
  77.   }
  78. }
  79.